package film;

import gestionnaire.NoterFilm;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.HashSet;
import java.util.Set;

import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.IdClass;
import javax.persistence.OneToMany;
import javax.persistence.Table;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;
import javax.persistence.Transient;

import com.sun.javafx.beans.IDProperty;

import personne.Personne;
import recompenses.RecompenserFilm;

@Entity
@Table(name = "film")
public class Film  implements Serializable{

	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;
	

	@Id
	@Column(name = "code_film")
	private int code_film = -1;
	
	@Column(name = "titre")
	private String titre = "titre";
	
	@Column(name = "annee_sortie")
	@Temporal(TemporalType.DATE)
	private Date annee_sortie = Calendar.getInstance().getTime();
	
	@Column(name = "cout")
	private int cout = 0;
	
	@Column(name = "genre")
	private String genre = "Action";
	
	@Column(name = "lien_photo")
	private String lien_photo = "lien";
	
	@Column(name = "valide")
	private int valide = 1;
	
	@Column(name = "date_creation")
	@Temporal(TemporalType.DATE)
	private Date date_creation = Calendar.getInstance().getTime();
	
    @OneToMany(mappedBy = "film", cascade = { CascadeType.REMOVE }) 
    private Set<RecompenserFilm> recompense = new HashSet<RecompenserFilm>(); 
    
    @OneToMany(mappedBy = "film", cascade = { CascadeType.REMOVE }) 
    private Set<NoterFilm> utilisateur = new HashSet<NoterFilm>();
    
    @OneToMany(mappedBy = "film", cascade = { CascadeType.REMOVE }) 
    private Set<Participer> personne = new HashSet<Participer>();
    
	@Transient
    public ArrayList<Personne> listePersonne;
	
	
	
	public Film (){
		
	}
	
	
	public Film (int code , String titre , Date annee , String lien , String genre, int cout)
	{
		this.setTitre(titre);
		this.setAnnee_sortie(annee);
		this.setLien_photo(lien);
		this.setCode_film(code);
		this.setGenre(genre);
		this.setCout(cout);
	}

	public Film (int code , String titre , Date annee , String lien , String genre, int cout , Date date)
	{
		this.setTitre(titre);
		this.setAnnee_sortie(annee);
		this.setLien_photo(lien);
		this.setCode_film(code);
		this.setGenre(genre);
		this.setCout(cout);
		this.setDate_creation(date);
		this.setValide(0);
	}
	
	
	public int getCode_film() {
		return code_film;
	}

	public void setCode_film(int code_film) {
		this.code_film = code_film;
	}

	public String getTitre() {
		return titre;
	}

	public void setTitre(String titre) {
		this.titre = titre;
	}

	public Date getAnnee_sortie() {
		return annee_sortie;
	}

	public void setAnnee_sortie(Date annee_sortie) {
		this.annee_sortie = annee_sortie;
	}

	public String getLien_photo() {
		return lien_photo;
	}

	public void setLien_photo(String lien_photo) {
		this.lien_photo = lien_photo;
	}
	
	public Set<RecompenserFilm> getRecompense() {
		return this.recompense;
	}

	public void setRecompense(Set<RecompenserFilm> recompense) {
		this.recompense = recompense;
	}

	public Set<NoterFilm> getUtilisateur() {
		return utilisateur;
	}

	public void setUtilisateur(Set<NoterFilm> utilisateur) {
		this.utilisateur = utilisateur;
	}


	public int getCout() {
		return cout;
	}


	public void setCout(int cout) {
		this.cout = cout;
	}


	public Set<Participer> getPersonne() {
		return personne;
	}


	public void setPersonne(Set<Participer> personne) {
		this.personne = personne;
	}


	public int getValide() {
		return valide;
	}


	public void setValide(int valide) {
		this.valide = valide;
	}


	public String getGenre() {
		return genre;
	}


	public void setGenre(String genre) {
		this.genre = genre;
	}


	public Date getDate_creation() {
		return date_creation;
	}


	public void setDate_creation(Date date_creation) {
		this.date_creation = date_creation;
	}
	
	
}
